package com.yupi.oj.model.vo;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.yupi.oj.model.dto.question.ExampleDTO;
import com.yupi.oj.model.entity.Question;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@ApiModel("题目 VO")
@Data
public class QuestionVO implements Serializable {


    @ApiModelProperty("题目 ID")
    private Long id;

    /**
     * 题目编号
     */
    @ApiModelProperty(value = "题目编号")
    private Long no;

    /**
     * 题目标题
     */
    @ApiModelProperty(value = "题目标题")
    private String title;

    /**
     * 题目描述
     */
    @ApiModelProperty(value = "题目描述")
    private String description;

    /**
     * 输入
     */
    @ApiModelProperty(value = "输入")
    private String input;

    /**
     * 输出
     */
    @ApiModelProperty(value = "输出")
    private String output;

    /**
     * 样例
     */
    @ApiModelProperty(value = "样例")
    private List<ExampleDTO> exampleDTOList;

    /**
     * 提示
     */
    @ApiModelProperty(value = "提示")
    private String tip;

    /**
     * 难度等级
     */
    @ApiModelProperty(value = "难度等级")
    private String difficultLevel;

    /**
     * 标签（数组）
     */
    @ApiModelProperty(value = "标签（数组）")
    private List<String> tagList;

    /**
     * 提交次数
     */
    @ApiModelProperty(value = "提交次数")
    private Integer submitNum;

    /**
     * 解决次数
     */
    @ApiModelProperty(value = "解决次数")
    private Integer solveNum;

    /**
     * 通过率
     */
    @ApiModelProperty(value = "通过率")
    private Double passRate;

    /**
     * 内存限制（KB）
     */
    @ApiModelProperty(value = "内存限制（KB）")
    private Integer memoryLimit;

    /**
     * 时间限制（ms）
     */
    @ApiModelProperty(value = "时间限制（ms）")
    private Integer timeLimit;

    /**
     * 创建用户
     */
    @ApiModelProperty(value = "创建用户")
    private String createBy;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    private static final long serialVersionUID = 1L;


    /**
     * Bean to VO
     *
     * @param question 问题
     * @return questionVO
     */
    public static QuestionVO beanToVO(Question question) {
        String example = question.getExample();
        String tag = question.getTag();
        QuestionVO questionVO = new QuestionVO();
        BeanUtils.copyProperties(question, questionVO);
        List<ExampleDTO> exampleList = new ArrayList<>();
        if (StrUtil.isNotBlank(example)) {
            exampleList = JSONUtil.parseArray(example).toList(ExampleDTO.class);
            questionVO.setExampleDTOList(exampleList);
        }

        List<String> tagList = new ArrayList<>();
        if (StrUtil.isNotBlank(tag)) {
            tagList = JSONUtil.parseArray(tag).toList(String.class);
            questionVO.setTagList(tagList);
        }
        return questionVO;
    }
}